แนวทางการปรับแต่งแบบทันสมัยของ CUDA แสดงถึง การเปลี่ยนแปลงรูปแบบความคิด จากการประมวลผลแบบสตรีมดั้งเดิมที่มีข้อจำกัดจากหน่วยประมวลผลหลัก (CPU) สู่ ระบบนิเวศที่ทำงานอัตโนมัติและได้รับการเร่งด้วยฮาร์ดแวร์. การเปลี่ยนผ่านนี้ช่วยลดภาระงานด้านโฮสต์โดยการส่งมอบงานจัดสรรหน่วยความจำ การซิงโครไนซ์ และการส่งคำสั่งเคอร์เนลไปยังฮาร์ดแวร์กราฟิกโดยตรง
1. การพัฒนาของอินเทอร์เฟซซอฟต์แวร์-ฮาร์ดแวร์
การปรับแต่งเริ่มต้นจากไดรเวอร์ แอปพลิเคชันสมัยใหม่ใช้ cuInit และ cuModuleLoad เพื่อจัดการโมดูล คุณสมบัติสำคัญหนึ่งคือ การโหลดแบบด่วน (Lazy Loading) (CUDA_MODULE_LOADING=LAZY) ซึ่งหมายถึง ฟังก์ชันจะถูกโหลดเข้าไปในสภาพแวดล้อมกราฟิกเฉพาะเมื่อมีการเรียกใช้งานครั้งแรกเท่านั้น ทำให้ลดขนาดหน่วยความจำและเวลาเริ่มต้นอย่างมาก
2. ความเข้ากันได้ของไบนารีและการคอมไพล์แบบทันที (JIT)
ประสิทธิภาพยังคงคงที่แม้จะใช้กับรุ่นต่างๆ โดยใช้ PTX (การประมวลผลแบบหลายเธรดขนานกัน) และ cubin. ตัวคอมไพล์แบบทันที (JIT) รับประกันว่าโค้ดระดับสูงของ PTX จะได้รับการปรับให้เหมาะสมกับ ชุดคุณสมบัติเฉพาะสถาปัตยกรรม ของกราฟิกที่เป็นเป้าหมายในขณะทำงาน ตัวอย่างเช่น การคอมไพล์กับเวอร์ชัน CUDA 11.3 อนุญาตให้ทำงานบนไดรเวอร์เวอร์ชัน 11.4 โดยไม่ต้องคอมไพล์ใหม่ เนื่องจากมีความเข้ากันได้ของ ABI
3. ขอบเขตทรัพยากรและการดำเนินการ
การดำเนินการแบบสมัยใหม่ถูกควบคุมด้วยการจับคู่ทรัพยากรอย่างเข้มงวดระหว่าง บัฟเฟอร์พารามิเตอร์ (PB) และ บล็อกเธรด (TB). ซึ่งสามารถแสดงทางคณิตศาสตร์ได้ดังนี้:
$$PB = \{BP_0, BP_1, \dots, BP_L\}, \quad TB = \{BT_0, BT_1, \dots, BT_L\}$$
โดยที่การตรวจสอบข้อจำกัดด้านฮาร์ดแวร์รับรองว่า $$BT_n \le BP_m$$ เมื่อ $$n \le m$$ โครงสร้างนี้ช่วยให้สามารถเริ่มการทำงานแบบอัตโนมัติผ่าน cudaLaunchDevice โดยยังคงอยู่ภายใต้ข้อจำกัดของฮาร์ดแวร์
4. ตัวดำเนินการจัดการแบบรีบเร่ง
การปรับแต่งในปัจจุบันต้องการการมองเห็นข้อมูลที่จัดการได้อย่างครอบคลุม ตัวดำเนินการเช่น cudaMemPrefetchAsync และ ตัวจัดสรรระบบ ช่วยให้กราฟิกสามารถเตรียมข้อมูลล่วงหน้าก่อนเข้าสู่เคอร์เนล ทำให้กำจัดจุดติดขัดแบบซิงโครนัสบนแพลตฟอร์มที่หลากหลายที่มี โปรเซสเซอร์ Arm และ กราฟิกนีเวียร์ดา.